package com.gitee.cirnochat.user.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.gitee.cirnochat.user.model.entity.FriendApply;
import com.gitee.cirnochat.user.model.vo.req.friend.FriendApplyAddRequest;
import com.gitee.cirnochat.user.model.vo.req.friend.FriendApplyInvitorAddRequest;
import com.gitee.cirnochat.user.model.vo.resp.FriendApplyVo;

import java.util.List;

/**
* @author FlanChan
* @description 针对表【friend_request(好友请求记录)】的数据库操作Service
* @createDate 2025-04-17 14:31:33
*/
public interface FriendApplyService extends IService<FriendApply> {

    /**
     * 通过id发送好友请求
     * @param req     好友请求信息
     * @param userId 用户ID
     */
    void sendFriendRequestById(FriendApplyAddRequest req, Long userId);

    /**
     * 通过邀请人发送好友请求
     *
     * @param req     好友请求信息
     * @param userId 用户ID
     */
    void sendFriendRequestByInvited(FriendApplyInvitorAddRequest req, Long userId);

    /**
     * 分页好友请求列表
     *
     * @param userId 用户ID
     * @return 好友请求列表
     */
    List<FriendApplyVo> listFriendRequests(Long userId);

    /**
     * 统计好友请求数量
     *
     * @param userId 用户ID
     * @return 好友请求数量
     */
    Long countFriendRequests(Long userId);

    /**
     * 同意好友请求
     *
     * @param requestId 好友请求 ID
     * @param userId 用户ID
     */
    void acceptFriendRequest(Long requestId, Long userId);

    /**
     * 拒绝好友请求
     *
     * @param requestId 好友请求 ID
     * @param userId 用户ID
     */
    void rejectFriendRequest(Long requestId, Long userId);

   /**
    * 撤回好友请求
    *
    * @param requestId 好友请求 ID
    * @param userId 用户ID
    */
    void revokeFriendRequest(Long requestId, Long userId);

}
